using System;
using System.Collections.Generic;
using System.Text;
using BusinessLayer.Model;

namespace BusinessLayer
{
    /// <summary>
    /// Implementacja serwisu odpowiadajacego za wyszukiwanie w tresci zindeksowanych stron WWW
    /// </summary>
    public class SearchService : ISearchService
    {
        /// <summary>
        /// Data Access Object odpowiedzialny za skladowanie danych
        /// </summary>
        private TPBWyszukiwarkaDao dao;

        public TPBWyszukiwarkaDao Dao
        {
            get { return dao; }
            set { dao = value; }
        }

        /// <summary>
        /// Metoda owpowiedzialna za wyszukanie podanej frazy
        /// </summary>
        /// <param name="phrase">tekst do wyszukania</param>
        /// <returns>kulekcja wynikow wyszukiwania</returns>
        public IList<SearchResult> FindPhrase(string phrase)
        {
            IList<SearchResult> result = new List<SearchResult>();
            string[] words = phrase.Split(new char[]{' '});

            foreach (string word in words)
            {
                IList<IndexElement> l = dao.FindIndexElementsByWord(word.ToUpper());
                foreach (IndexElement ie in l)
                {
                    SearchResult sr = new SearchResult();
                    sr.Url = ie.Page.Url;

                    string pageContent = ie.Page.Content;
                    int startIndex = (int) ie.Offset - 15;
                    int endIndex = (int) ie.Offset + 15;
                    if (startIndex < 0)
                    {
                        startIndex = 0;
                    }
                    if (ie.Offset > pageContent.Length)
                    {
                        ie.Offset = pageContent.Length;
                    }

                    sr.Content = pageContent.Substring(startIndex, endIndex);

                    result.Add(sr);
                }
            }

            return result;
        }
    }
}
